﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>

//1.比如：写一个判断大写字母和小写字母
//int main()
//{
//	int ch = getchar();
//	if (ch >= 'A' && ch <= 'Z')
//	{
//		printf("大写\n");
//	}
//	else if (ch >= 'a' && ch <= 'z')
//	{
//		printf("小写\n");
//	}
//	return 0;
//}

//2.解islower和isupper
//int main()
//{
//	int ch = getchar();
//	if (isupper(ch))
//	{
//		printf("大写\n");
//	}
//	else if(islower(ch))
//	{
//		printf("小写\n");
//	}
//	return 0;
//}
//islower isupper 

//3.写⼀个代码，将字符串转换成小写
//int main()
//{
//	char ch[] = "aASDSADaa";
//	int i = 0;
//	while (ch[i])
//	{
//		if (isupper(ch[i]))
//		{
//			ch[i] = ch[i] + 32;
//		}
//		putchar(ch[i]);
//		i++;
//	}
//	return 0;
//}

//int main()
//{
//	char ch[] = "sdada DADAD";
//	int i = 0;
//	while (ch[i])
//	{
//		if (isupper(ch[i]))
//		{
//			ch[i] = tolower(ch[i]);
//		}
//		else if (islower(ch[i]))
//		{
//			ch[i] = toupper(ch[i]);
//		}
//		putchar(ch[i]);
//		i++;
//	}
//	return 0;
//}
//tolower, toupper

//1.strlen的使⽤和模拟实现
//size_t my_strlen(const char* ps)
//{
//	assert(ps);
//	size_t count = 0;
//	while (*ps)
//	{
//		count++;
//		ps++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[] = "dasdad";
//	size_t ret = my_strlen(arr);
//	printf("%zd", ret);
//
//	return 0;
//}

//2.strlen的使⽤和模拟实现
//size_t my_strlen(const char* ps)
//{
//	assert(ps);
//	const char* pps = ps;
//	while (*ps)
//	{
//		ps++;
//	}
//	return ps - pps;
//}
//int main()
//{
//	char arr[] = "dasdad";
//	size_t ret = my_strlen(arr);
//	printf("%zd", ret);
//
//	return 0;
//}

//：方法3 写个函数不能使用临时变量求字符串长度
//size_t my_strlen(const char* ps1)
//{
//	if (*ps1 == '\0')
//	{
//		return 0;
//	}
//	else
//	{
//		return 1 + my_strlen(ps1 + 1);
//	}
//}
//int main()
//{
//	char arr[] = "dasdad";
//	size_t ret = my_strlen(arr);
//	printf("%zd", ret);
//
//	return 0;
//}

//strcpy的使⽤和模拟实现
//int main()
//{
//	char arr1[20] = "XXXXXXXXXX";
//	char arr2[] = "hello";
//	strcpy(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}

//char* my_strcpy(char* ps1, const char* ps2)
//{
//	assert(ps1 && ps2);
//    char* ps3 = ps1;
//	while (*ps1++ = *ps2++)
//	{
//		/**ps1 = *ps2;
//		ps1++;
//		ps2++;*/
//		;
//	}
//	return ps3;
//}
//int main()
//{
//	char arr1[20] = "xxxxx";
//	char arr2[] = "ADADSDASddd";
//	printf("%s\n", my_strcpy(arr1, arr2));
//	return 0;
//}

//5. strcat的使⽤和模拟实现
//int main()
//{
//	char arr1[20] = "sb";
//	char arr2[] = "hello";
//	strcat(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}

//char* my_strcat(char* ps1, const char* ps2)
//{
//	assert(ps1 && ps2);
//	char* ps3 = ps1;
//	while (*ps1)
//	{
//		ps1++;
//	}
//	while (*ps1++ = *ps2++)
//	{
//		;
//	}
//
//	return ps3;
//}
//int main()
//{
//	char arr1[20] = "sb";
//	char arr2[] = "zhangsan";
//	my_strcat(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}

//6.strcmp的使⽤和模拟实现
//int my_strcmp(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//		{
//			return 0;
//		}
//		str1++;
//		str2++;
//	}
//	return *str1 - *str2;
//}
//int main()
//{
//	char arr1[] = "abcdeb";
//	char arr2[] = "abcdeb";
//	int ret = my_strcmp(arr1, arr2);
//	if (ret > 0)
//	{
//		printf("大于\n");
//	}
//	else if(ret < 0)
//	{
//		printf("小于\n");
//
//	}
//	else
//	{
//		printf("等于\n");
//	}
//	return 0;
//}

//使用strncpy函数的使⽤ 
//char* my_strncpy(char* str1, const char* str2,size_t num)
//{
//	assert(str1 && str2);
//	char* str3 = str1;
//	int count = num;
//	
//		while (*str1++ = *str2++)
//		{
//			if (num == 1)
//			{
//				break;
//			}
//			num--;
//		}
//		return str1;
//}
//int main()
//{
//	char arr1[] = "zhangsan";
//	char arr2[] = "lisi";
//	my_strncpy(arr1, arr2,2);
//	printf("%s\n", arr1);
//	return 0;
//}

//10.strstr的使⽤和模拟实现 - 找相同字符串
//char* my_strstr(const char* str1, const char* str2)
//{
//	assert(str1 && str2);
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	const char* cur = str1;
//	
//	if (*str1 == '\0')
//	{
//		return (char*)str1;
//	}
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = str2;
//
//		while (*s1 && *s2 && *s1 == *s2)
//		{
//			*s1++;
//			*s2++;
//		}
//		if (*s2 == '\0')
//		{
//			return (char*)cur;
//		}
//		else
//		{
//			cur++;
//		}
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "abbbcde";
//	char arr2[] = "abbbcde";
//	char* ret = my_strstr(arr1, arr2);
//	printf("%s\n", ret);
//	return 0;
//}
//islower , isupper tolower, toupper
//strcpy strcmp strcat strstr strlen strtok

//int main()
//{
//	char arr1[] = "zhangsan@163.com";
//	char * p = "@.";
//	char arr3[20] = { 0 };
//	strcpy(arr3, arr1);
//	char* s = strtok(arr3, p);
//	printf("%s\n", s);
//	s = strtok(NULL,p);
//	printf("%s\n", s);
//	s = strtok(NULL, p);
//	printf("%s\n", s);
//
//	return 0;
//}

//int main()
//{
//	char arr1[] = "zhangsan@163.com";
//	char arr2[20] = { 0 };
//	strcpy(arr2, arr1);
//	char* p = "@.";
//
//	char* s = NULL;
//	for (s = strtok(arr1,p);s != NULL;s = strtok(NULL,p))
//	{
//		printf("%s\n", s);
//	}
//	return 0;
//}